package demo1;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Demo {
    public static void main(String[] args) throws Exception{
        //需求:调用User的sayHello方法
        // 1:传统方式，硬编码
        // 优点:效率高，直接
        // 缺点:写死了，如果后期出现其他对象则需要修改这里的代码
        User user = new User();
        user.sayHello();

        //2:反射机制
        // 优点:灵活
        // 缺点:效率，编写大量的反射代码，导致代码的可读性差
        Class cls = Class.forName("demo1.User");
        User user1 = (User) cls.newInstance();
        user1.sayHello();

        //3:Spring容器
        //优点:Spring容器来管理项目中的类，避免了大量的反射代码，并且还提供了IOC,AOP等功能进行灵活的开发
        // Spring容器创建时可以指定一个包名，Spring会扫描这个包，将其中所有被@Component注解标注的类纳入管理。
        // AnnotationConfigApplicationContext--->可输入ACAC快速找到.
        AnnotationConfigApplicationContext context
                =new AnnotationConfigApplicationContext("demo1");
        User user2 = context.getBean(User.class);
        user2.sayHello();
    }
}
